#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "timers.h"

//#define LEN 200000

long int recTimer();

main(int argc, char **argv)
{
	int LEN = 20000000;
	if(argc>1) {
				LEN = (int) strtol(argv[1], NULL, 10);

			}
	
	long int time_start = recTimer();

	int np, rank;
	np = 1;
	double *liczba;
	double *divliczba;

	int counter = 0;
	int wynik = 0;

	liczba = (double*)malloc(sizeof(*liczba)*LEN*np);
	divliczba = (double*)malloc(sizeof(*divliczba)*LEN);

	unsigned int iseed = (unsigned int)time(NULL);
	srand (iseed);
	int i;
	if(rank == 0) {
		for(i=0; i<(LEN*np); i++) {

			liczba[i] = (double)rand()/RAND_MAX;

		}

	}

	//MPI_Scatter(liczba, LEN, MPI_DOUBLE, divliczba, LEN, MPI_DOUBLE, 0,MPI_COMM_WORLD);
	// free(liczba);

	int j;
	for(j=0; j<(LEN/2); j++) {
		
		if((double)pow(liczba[j],2) + (double)pow(liczba[j+(LEN/2)],2)<1) {
			counter++;
		}

	}

	//free(divliczba);

	// MPI_Reduce(&counter, &wynik, 1, MPI_INT,MPI_SUM, 0, MPI_COMM_WORLD);
	// MPI_BARRIER(MPI_COMM_WORLD);

	printf("PI wynosi około: %f \n", (double)4* counter/(np*(LEN/2)));

	//MPI_Finalize();

	printf("Czas całego programu: %f \n", (double)(recTimer()-time_start) / 1000000000);
}

long int recTimer() {
	struct timespec t;
	clock_gettime(CLOCK_MONOTONIC, &t);
	return ((t.tv_sec * TIMER_SCALE) + t.tv_nsec);
}
